//! # RustCloud 消息总线系统
//!
//! 提供企业级的消息总线功能，支持事件驱动架构、发布订阅模式和异步消息处理。
//! 
//! ## 核心功能
//! 
//! - **消息发布订阅**：支持主题和模式匹配的消息路由
//! - **消息队列**：可靠的消息队列机制，支持持久化和事务
//! - **事件驱动架构**：完整的事件系统，支持事件聚合和处理
//! - **多种适配器**：支持内存、Redis、Kafka、NATS 等多种消息传输方式
//! - **高性能**：基于 Tokio 异步运行时，支持高并发消息处理
//! - **可观测性**：完整的指标、日志和追踪集成
//! 
//! ## 快速开始
//! 
//! ```rust
//! use rustcloud_bus::prelude::*;
//! 
//! #[tokio::main]
//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
//!     // 创建内存消息总线
//!     let bus = InMemoryMessageBus::new().await?;
//!     
//!     // 订阅消息
//!     let subscriber = bus.subscribe("user.events").await?;
//!     
//!     // 发布消息
//!     let message = Message::new("user.created", json!({"id": 123, "name": "Alice"}));
//!     bus.publish(message).await?;
//!     
//!     // 接收消息
//!     if let Some(msg) = subscriber.receive().await? {
//!         println!("收到消息: {}", msg.payload());
//!     }
//!     
//!     Ok(())
//! }
//! ```

// 核心模块
pub mod bus;
pub mod builder;
pub mod event;
pub mod event_bus;
pub mod message;
pub mod persistence;
pub mod file_storage;
// pub mod db_storage; // 暂时禁用，需要sqlx依赖

// 🆕 新增：使用公共功能模块
// 使用 rustcloud-resilience 的死信队列和错误处理
pub use rustcloud_resilience::{
    DeadLetterQueue, InMemoryDeadLetterQueue, DeadLetterConfig,
    RetryStrategy, ExponentialBackoffStrategy, RetryExecutor,
    ErrorHandler, ErrorHandlingResult
};

// 使用 rustcloud-observability 的监控和健康检查
pub use rustcloud_observability::{
    Monitor, InMemoryMonitor, MonitoringConfig, MonitoringMetrics,
    HealthChecker, HealthCheckResult, HealthStatus,
    AlertHandler, AlertManager, Alert, AlertLevel
};

// ✅ 保持原有模块的向后兼容性
pub mod dead_letter {
    //! 死信队列模块 - 现在使用 rustcloud-resilience
    //! 
    //! 为了保持向后兼容性，这里重新导出 rustcloud-resilience 的类型
    
    pub use rustcloud_resilience::{
        DeadLetterQueue, DeadLetterMessage, DeadLetterConfig, DeadLetterStats,
        InMemoryDeadLetterQueue, RetryDelayStrategy, AlertThresholds
    };
}

pub mod monitoring {
    //! 监控模块 - 现在使用 rustcloud-observability
    //! 
    //! 为了保持向后兼容性，这里重新导出 rustcloud-observability 的类型
    
    pub use rustcloud_observability::{
        Monitor, MonitoringMetrics, MonitoringConfig,
        ThroughputMetrics, LatencyMetrics, ErrorRateMetrics, ResourceUsageMetrics,
        InMemoryMonitor, PerformanceMonitor, SystemHealthChecker
    };
}

pub mod admin_api;
pub mod publisher;
pub mod subscriber;
pub mod router;
pub mod error;

// 实现模块
pub mod memory;

// 适配器模块（可选功能）
#[cfg(feature = "redis")]
pub mod redis_adapter;

#[cfg(feature = "kafka")]
pub mod kafka_adapter;

#[cfg(feature = "nats")]
pub mod nats_adapter;

// 工具模块
pub mod config;
pub mod metrics;
pub mod utils;

// 便捷导入
pub mod prelude {
    pub use crate::bus::*;
    pub use crate::message::*;
    pub use crate::publisher::*;
    pub use crate::subscriber::*;
    pub use crate::router::*;
    pub use crate::error::*;
    
    // 事件驱动系统
    pub use crate::event::*;
    pub use crate::event_bus::*;
    
    // 持久化系统
    pub use crate::persistence::*;
    pub use crate::file_storage::*;
    // pub use crate::db_storage::*;
    
    // 🆕 新公共功能 - 直接导出主要类型
    pub use rustcloud_resilience::{
        DeadLetterQueue, InMemoryDeadLetterQueue, DeadLetterConfig,
        RetryStrategy, ExponentialBackoffStrategy,
        ErrorHandler, ErrorHandlingResult
    };
    
    pub use rustcloud_observability::{
        Monitor, InMemoryMonitor, MonitoringConfig,
        HealthChecker, HealthStatus,
        AlertHandler, Alert, AlertLevel
    };
    
    // ✅ 保持向后兼容 - 通过模块重新导出导入
    pub use crate::dead_letter::*;
    pub use crate::monitoring::*;
    pub use crate::admin_api::*;
    
    // 内存实现
    pub use crate::memory::*;
    
    // Redis 适配器（可选）
    #[cfg(feature = "redis")]
    pub use crate::redis_adapter::*;
    
    // 建造者模式
    pub use crate::builder::*;
    
    // 配置和指标
    pub use crate::config::*;
    
    #[cfg(feature = "metrics")]
    pub use crate::metrics::*;
    
    // 常用的外部导入
    pub use async_trait::async_trait;
    pub use serde::{Deserialize, Serialize};
    pub use serde_json::{json, Value};
    pub use tokio;
    pub use uuid::Uuid;
}

// 重新导出核心类型
pub use bus::*;
pub use builder::*;
pub use event::*;
pub use event_bus::*;
pub use message::*;
pub use persistence::*;
pub use file_storage::*;
// pub use db_storage::*;
pub use admin_api::*;
pub use publisher::*;
pub use subscriber::*;
pub use router::*;
pub use error::*;

// 🆕 通过模块重新导出新公共功能（保持API兼容）
pub use dead_letter::*;
pub use monitoring::*;

#[cfg(feature = "redis")]
pub use redis_adapter::*;

#[cfg(feature = "metrics")]
pub use metrics::*;

// 版本信息
pub const VERSION: &str = env!("CARGO_PKG_VERSION");

// Mock框架（用于测试）
#[cfg(test)]
pub mod mock;

// 测试模块
#[cfg(test)]
mod tests;

#[cfg(test)]
mod test_message_bus;

#[cfg(test)]
mod test_subscriber;

#[cfg(test)]
mod test_publisher;

#[cfg(test)]
mod test_error_handling;

#[cfg(test)]
mod test_performance;

#[cfg(test)]
mod test_wildcard;

#[cfg(test)]
mod test_integration;

#[cfg(test)]
mod test_coverage;